package com.walleipt.kafka;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

import org.apache.log4j.FileAppender;
import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.PatternLayout;
import org.apache.log4j.RollingFileAppender;

public class LoggerUtil {
	
	static Map<String,Logger> loggers = new HashMap<String,Logger>() ;
	
	public static Logger getLoggerByName( String ip, String topic) {
	
		
		if ( loggers.get( ip+"_"+topic )!=null )
			return loggers.get( ip+"_"+topic ) ;
		
		// 通过消费者配置文件获取消费者
		Properties props = new Properties();
		InputStream inputStream = ContextListener.class.getResourceAsStream("/log4j.properties");
		BufferedReader bf;
		try {
			bf = new BufferedReader(new InputStreamReader(inputStream,"UTF-8"));
			props.load(bf);
		} catch (IOException e1) {
			e1.printStackTrace();
		}
		
		// 生成新的Logger
		// 如果已經有了一個Logger實例返回現有的
		Logger logger = Logger.getLogger( topic );
		// 清空Appender。特別是不想使用現存實例時一定要初期化
		logger.removeAllAppenders();
		// 設定Logger級別。
		logger.setLevel(Level.INFO);
		// 設定是否繼承父Logger。
		// 默認為true。繼承root輸出。
		// 設定false後將不輸出root。
		logger.setAdditivity(true);
		// 生成新的Appender
		FileAppender appender = new RollingFileAppender();
		PatternLayout layout = new PatternLayout();
		// log的输出形式
//		String conversionPattern = "[%d] %p %t %c - %m%n";
		String conversionPattern = "%m%n";
		layout.setConversionPattern(conversionPattern);
		appender.setLayout(layout);
		
		// log输出路径
		String outPath = props.getProperty( "outpath" )+ File.separator + File.separator + ip + File.separator+ topic ;
		File outDir = new File(outPath ) ;
		if ( !(outDir.exists() && outDir.isDirectory())  )
			outDir.mkdir() ;
		
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		appender.setFile(outPath + "/" + sdf.format( new Date() ) + ".log");
		// log的文字码
		appender.setEncoding("UTF-8");
		// true:在已存在log文件后面追加 false:新log覆盖以前的log
		appender.setAppend(true);
		// 适用当前配置
		appender.activateOptions();
		// 将新的Appender加到Logger中
		logger.addAppender(appender);
		
		loggers.put( ip+"_"+topic, logger ) ;
		
		return logger;
	}
}
